<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"
    />
    <title>迭代模式</title>
    <style lang="css">
        .preload {
            display: block;
            width: 160px;
            height: 160px;
        }
    </style>
</head>

<body>
    <h2>迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素，而又不需要暴露该对象 的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来，在使用迭代器模式之后，即 使不关心对象的内部构造，也可以按顺序访问其中的每个元素。</h2>
    <p>实现一个 each 函数</p>

    <script type="text/javascript">
        // 实现一个 each 函数
        var each = function (ary, callback) {
            for (var i = 0; i < ary.length; i++) {
                callback.call({}, i, ary[i], ary);
            }
        }
        each([11, 22, 33], function (index, item, arr) {
            console.log(index + ' -- ' + item + ' -- ' + arr)
        })

        // 方法绑定到数组原型上，数组每个元素添加一个 MM
        Array.prototype.eachtest = function (callback) {
            var selfAry = Object(this);
            var back = []
            for (var i = 0; i < selfAry.length; i++) {
                back.push(callback.call({}, selfAry[i]))
            }
            return back
        }
        function add(item) {
            return item + 'MM'
        }
        var result = ['a', 'b', 'c'].eachtest(add)
        console.log(result)

    </script>

</body>

</html>